﻿(function ($) {
    $.SendDataAjax = function (SDParameters) {
        //Establecemos los valores por defecto
        sdp_def = {
            LoadElementID: "",
            URL: "",
            Parametros: {},
            ResultElementID: "",
            EventError: "",
            EventSuccess: "",
            DisabledButtonID: "",
            HabilitarButtonAfterSuccess: true,
            HabilitarButtonAfterError: true
        }
        SDOptions = jQuery.extend(sdp_def, SDParameters);

        //Mostramos el objeto de Animacion de Carga y Ocultamos el objeto de resultado
        var $LoadID = $(SDOptions.LoadElementID);
        var $ResultID = $(SDOptions.ResultElementID);
        var $BtnID = $('input[name="' + SDOptions.DisabledButtonID + '"]');
        if ($ResultID) $ResultID.hide();
        if ($LoadID) $LoadID.fadeIn(100);
        if ($BtnID) $BtnID.attr("disabled", "true");

        //Ejecutamos la llamada AJAX del jQuery
        $.ajax({
            url: SDOptions.URL,
            type: 'POST',
            traditional: true,
            data: SDOptions.Parametros,
            success: function (datos) {
                //Verificamos que los datos se hayan completado correctamente
                if (datos.Success) {
                    $ResultID.removeClass("result-error");
                    $ResultID.addClass("result-success");
                    if ((SDOptions.HabilitarButtonAfterSuccess) && ($BtnID)) $BtnID.removeAttr("disabled");
                } else {
                    $ResultID.removeClass("result-success");
                    $ResultID.addClass("result-error");
                    if ((SDOptions.HabilitarButtonAfterError) && ($BtnID)) $BtnID.removeAttr("disabled");
                }
                //Establecemos el mensaje devuelto por el metodo que se llamo
                $ResultID.html(datos.Mensaje);

                //Mostramos el objeto resultado y ocultamos el objeto de carga
                if ($LoadID) $LoadID.hide();
                $ResultID.fadeIn(100);

                //Si existe una funcion de CallBack, la mandamos a ejecutar en este momento
                if (datos.Success) {
                    if (SDOptions.EventSuccess != "") SDOptions.EventSuccess();
                } else {
                    if (SDOptions.EventError != "") SDOptions.EventError(datos.Mensaje);
                }
            },
            error: function (jqXhr, textStatus, errorThrown) {
                $ResultID.removeClass("result-success");
                $ResultID.addClass("result-error");
                $ResultID.html("Ocurrió un error interno de la aplicación al intentar efectuar la operación. Por favor intente refrescar la paginas (F5) o vuelva a intentar en otro momento.");

                //Mostramos el objeto resultado y ocultamos el objeto de carga
                if ($LoadID) $LoadID.hide();
                $ResultID.fadeIn(100);
                if ((SDOptions.HabilitarButtonAfterError) && ($BtnID)) $BtnID.removeAttr("disabled");

                //Si existe una funcion de CallBack, la mandamos a ejecutar en este momento
                if (SDOptions.EventError != "") SDOptions.EventError("Ocurrió un error interno de la aplicación al intentar efectuar la operación. " + jqXhr + ". " + textStatus);
            }
        });
    };
})(jQuery);